#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : ATM.py
# @Author: shadow
# @Date  : 2019/12/3
# @Desc  : main

"""
要求：通过Python编程完成一个银行ATM机模拟系统，具备如下功能:
 (1)登陆验证：用户输入用户名密码登陆，检测用户名是否存在以及用户名密码是否匹配；用户名密码各有三次输入机会，超过三次系统退出。
 (2)菜单界面：登陆成功后显示功能操作界面，输入序号选择对应功能。
 (3)用户注册：用户可以输入用户名和密码创建自己的账号，并输入电话号码等信息，如果用户名存在则让用户重新输入用户名。注册后免费赠送5000元余额。
 (4)账户管理：用户可以随时查看自己的账户余额。用户可以输入其他账户用户名，实现转账功能；用户名必须存在。用户也可以模拟实现存取款功能。
 (5)管理员的用户名和密码可以预先初始化。
"""

"""
使用知识总结：
    1. tkinter 控件 (button，lable, messagebox, entry, Radiobutton, Checkbutton，Menu，Combobox，tree_table和Scrollbar)
    2. TK 页面布局 grid和参数熟悉(text, height, width, bg, fg, command).grid(row, rowspan, column, columnspan, pady, padyx, stick=W)
        command 可以使用lambda定义带参数函数
    3. entry 控件输入检查 (三个参数设置：validate='focusout', validatecommand， invalidcommand)
        控件状态设置：(参数：state：NORMAL, DISABLED，readonly)，刷新页面实现输完一个下一个才能输入
    4. TK 页面的切页和刷新，(切页：destroy 然后再生成新的Frame， 刷新：实际也是切页)
    5. TK 绑定鼠标和按键， (bind)
    6. TK 图片显示，待优化，只支持gif，否者要使用其他方法 (image参数)
    7. nametuple熟悉  (使用list生成对象：_make(tmp) 转成有序字典：_asdict()，元素不能修改,可以使用名字和索引访问)
    8. 正则表达式熟悉
    9. 对象（类）的熟悉
    10. 模块的使用，多模块互相调用，和调用系统库一样
    11. csv文件读写，使用csv.reader会自动去掉结尾的空白字符，可以直接按普通文件读写操作
    12. 测试了一下excel的读写，功能比较强大，但使用繁琐，后面再熟悉（ xlrd, xlwt）
    13. TK背景色设置 bg=None表示没有背景色或透明，也可以使用#rgb颜色或英文字符值设置颜色 如白色： bg="#FFFFFF" 或 bg="white"
    14. TK绑定的字符信息StringVar可以实时刷新，底色bg，状态stat，长度length等需要刷新界面
    15. TK的tree_table和Scrollbar配合展示所有用户信息，Combobox选择修改选项，管理员账户使用Menu
    16. TK的图标设置iconbitmap（ico图标）
    17. 界面刷新重绘框架采用基础装饰器封装一下
    18. 使用PIL 中的 Image, ImageTk来加载非gif图片，修改图片尺寸
遗留问题：
    1. TK 图片显示不出来（原因：图片对象需要和mainloop在一层才能使用，否者早已被回收，建议使用全局变量保存）
    2. 控件焦点的设置问题, （已解决，使用focus_set方法)
    3. entry输入检查一次后再输入不会检查，现在改变了方式每次刷新界面，性能肯定不够好
    4. 刷新页面会闪烁，怎么避免，是否有更好的方法
    5. 密码可以使用哈希保存更安全，(已修改，哈希要使用hashlib的md5，直接使用hash函数每次运行得到的值不相同)
    6. 控件输入完检查是否有其他好的方法，多个entry同时使用validate='focusout'时输完一个会调用下一个entry的函数，（更换了方式）
    7. 数据使用sql数据库保存更好，操作更方便，待后续优化
    8. 注册可以设置必须信息和不必须信息，后续优化
    9. 输入时提示信息实时更新，(已修改，部分弹框换提示)
    10. 绑定了回车键，输入时中途点击其他地方或按tab时会有bug
    11. meassagebox显示位置不能控制在主窗口上出现
参考：
    https://blog.csdn.net/yingshukun/article/details/53985080
"""

from tkinter import *
from Login import LoginPage

if __name__ == '__main__':
    # 窗口初始化
    window = Tk()
    # image = PhotoImage(file='../image/py.gif')
    # Label(window, image=image).grid()
    # # 登陆界面
    LoginPage(window)
    window.mainloop()



